package cn.weforward.task;

import java.util.Date;
import java.util.HashMap;
import java.util.List;

import cn.weforward.common.NameItem;
import cn.weforward.common.NameItems;
import cn.weforward.common.ResultPage;
import cn.weforward.data.UniteId;
import cn.weforward.data.log.BusinessLog;
import cn.weforward.framework.ApiException;
import cn.weforward.task.impl.SimpleBug;
import cn.weforward.task.impl.SimpleTask;

public interface Task {

	/** 状态-评估中 */
	NameItem STATE_ASSESS = NameItem.valueOf("评估中", 1);
	/** 状态-规划中 */
	NameItem STATE_PLAN = NameItem.valueOf("规划中", 2);
	/** 状态-待开发 */
	NameItem STATE_GONNA_DEV = NameItem.valueOf("待开发", 3);
	/** 状态-开发中 */
	NameItem STATE_DEV = NameItem.valueOf("开发中", 4);
	/** 状态-待测试 */
	NameItem STATE_GONNA_TEST = NameItem.valueOf("待测试", 5);
	/** 状态-测试中 */
	NameItem STATE_TEST = NameItem.valueOf("测试中", 6);
	/** 状态-测试通过 */
	NameItem STATE_PASS_TEST = NameItem.valueOf("测试通过", 7);
	/** 状态-已上线 */
	NameItem STATE_UP = NameItem.valueOf("已上线", 8);
	/** 状态-已拒绝 */
	NameItem STATE_REFUSE = NameItem.valueOf("已拒绝", 9);
	/** 状态-挂起 */
	NameItem STATE_HANGUP = NameItem.valueOf("挂起", 10);
	
	/** 优先级状态-低 */
	NameItem PRIORITY_LOW = NameItem.valueOf("低", 1);
	/** 优先级状态-中 */
	NameItem PRIORITY_MEDIUM = NameItem.valueOf("中", 2);
	/** 优先级状态-高 */
	NameItem PRIORITY_HIGH = NameItem.valueOf("高", 3);
	/** 优先级状态-最高 */
	NameItem PRIORITY_HIGHEST = NameItem.valueOf("最高", 4);
	/** 状态-全部 */
	NameItems STATES = NameItems.valueOf(STATE_ASSESS, STATE_PLAN,STATE_GONNA_DEV,STATE_DEV,STATE_GONNA_TEST,
			STATE_TEST,STATE_PASS_TEST,STATE_UP,STATE_REFUSE,STATE_HANGUP);
	NameItems PRIORITY_STATES = NameItems.valueOf(PRIORITY_LOW,PRIORITY_MEDIUM,
			PRIORITY_HIGH,PRIORITY_HIGHEST);
	
	/**
	 * 改变任务状态为评估中
	 * @throws ApiException 
	 */
	void assess() throws ApiException;
	/**
	 *改变任务状态为规划中
	 */
	void plan() throws ApiException;
	/**
	 * 改变任务状态为待开发
	 */
	void gonnaDev() throws ApiException;
	/**
	 * 改变任务状态为开发中
	 */
	void dev() throws ApiException;
	/**
	 * 改变任务状态为待测试
	 */
	void gonnaTest() throws ApiException;
	/**
	 * 改变任务状态为测试中
	 */
	void test() throws ApiException;
	/**
	 * 改变任务状态为测试通过
	 */
	void passTest() throws ApiException;
	/**
	 * 改变任务状态为已上线
	 */
	void up() throws ApiException;
	/**
	 * 改变任务状态为已拒绝
	 */
	void refuse() throws ApiException;
	/**
	 * 改变任务状态为挂起
	 * @throws ApiException 
	 */
	void hangUp() throws ApiException;

	NameItem getState();
	UniteId getId();
	String getTitle();
	String getFatherTaskId();
	String getManager();
	List<String> getHandlers();
	List<String> getFollower();
	String getCreator();
	void setTag(String tagId);
	String getTag();
	Date getExpectedStartTime();
	Date getExpectedEndTime();
	Date getCreateTime();
	Date getEndTime();
	void setEndTime(Date endTime);
	/**
	 * 获取子任务
	 * @param fatherId
	 * @return
	 */
	ResultPage<SimpleTask> getSonTasks();//获取子任务，DI帮忙完成
	/**
	 * 获取评论
	 */
//	void getComments();//获取评论，DI帮忙完成


	/**
	 * 新建一个bug信息
	 * @param content
	 * @param handler
	 * @param severity
	 * @param versionAndPlatForm
	 */
	Bug createBug(String content,List<String> handler, String severity, String versionAndPlatForm);

	/**
	 * 统计该任务下的bug情况
	 */
	HashMap<String, Integer> analyzeBugs();
	
	/**
	 * 获取该任务下的bug
	 * @return
	 */
	ResultPage<SimpleBug> getBugs(String taskId);//获取BUG，DI帮忙完成
	void addHandlers(List<String> handlers);
	void removeHandlers(List<String> handlers);
	void setTitle(String title);
	void setPriority(int priority);
	void setContent(String content);
	void setManager(String manager);
	void setHandlers(List<String> handlers);
	void addFollower(String follower);
	void setExpectedStartTime(Date expectedStartTime);
	void setExpectedEndTime(Date expectedEndTime);
	NameItem getPriority();
	/**
	 * 获取日志列表
	 * @return
	 */
	ResultPage<BusinessLog> getLogs();
	
}
